package uy.org.softtech.cssuite.servicios.impl;

import static org.springframework.util.Assert.notNull;

import javax.annotation.PostConstruct;

import org.apache.log4j.Logger;
import org.springframework.stereotype.Service;

import uy.org.softtech.cssuite.core.Servicio;
import uy.org.softtech.cssuite.entidad.sistema.Estadistica;
import uy.org.softtech.cssuite.servicios.ServiciosEstadisticas;

import com.hazelcast.core.Hazelcast;
import com.hazelcast.core.IMap;

/**
 * Clase que implementa {@link ServiciosEstadisticas}.
 * 
 * @author fabian.lobo
 * @see ServiciosEstadisticas
 */
@Service(value = "servicios-estadisticas")
public class ServiciosEstadisticasImpl extends Servicio implements ServiciosEstadisticas {

	private Logger log = Logger.getLogger(getClass());
	
	private IMap estadisticas = Hazelcast.getMap("estadisticas");
	
	/**
	 * Método para verificar que todos los parámetros han sido seteados correctamente.
	 * 
	 * @author fabian.lobo
	 */
	@PostConstruct
	public void inicializacion(){
		notNull(estadisticas(), "La propiedad [estadisticas] de [" + getClass().getName() + "] no ha sido establecida.");
		
		log.info("Implementación de los servicios relacionados a las estadísticas de las llamadas a controladores en la aplicación ha sido inicializado correctamente.");
	}
	
	@Override
	public void actualizarEstadisticas(String metodo, long tiempo) {
		Estadistica estadistica = (Estadistica) estadisticas.get(metodo);
		if(estadistica == null) {
			estadistica = new Estadistica(metodo);
		}
		estadistica.actualizarValores(tiempo);
		estadisticas.put(metodo, estadistica);
	}
	
	/*
	 *  GETTERS
	 */	
	public IMap estadisticas() {
		return estadisticas;
	}
}
